import xssImg0 from '../img/0.jpeg';
import xssImg1 from '../img/1.jpeg';

Cross Site Script 跨站脚本攻击，又称JS代码注入。  
Cross-site scripting的英文首字母缩写本应为CSS，但因为CSS在网页设计领域已经被广泛指层叠样式表（Cascading Style Sheets），所以将Cross（意为“交叉”）改以交叉形的X做为缩写。但早期的文件还是会使用CSS表示Cross-site scripting。

### 介绍
在网站上注入恶意的客户端代码。若受害者运行这些恶意代码，攻击者就可以突破网站的访问限制并冒充受害者。  
根据开放式 Web 应用安全项目（OWASP），XSS 在 2017 年被认为 7 种最常见的 Web 应用程序漏洞之一


如果 Web 应用程序没有部署足够的安全验证，那么，这些攻击很容易成功。浏览器无法探测到这些恶意脚本是不可信的，所以，这些脚本可以任意读取 cookie，session tokens，或者其它敏感的网站信息，或者让恶意脚本重写HTML内容。


恶意内容一般包括 JavaScript，但是，有时候也会包括 HTML，FLASH 或是其他浏览器可执行的代码。XSS 攻击的形式千差万别，但他们通常都会：将 cookies 或其他隐私信息发送给攻击者，将受害者重定向到由攻击者控制的网页，或是经由恶意网站在受害者的机器上进行其他恶意操作。

### XSS 分类

- 存储型 XSS  
注入型脚本永久存储在目标服务器上。当浏览器请求数据时，脚本从服务器上传回并执行。
<img src={xssImg0} style={{width:'80%'}} />

- 反射型 XSS  
在反射型XSS攻击过程中，恶意JS脚本属于用户发送给网站请求中的一部分，随后网站又把恶意JS脚本返回给用户，当恶意脚本再用户页面中被执行时，黑客就可以利用该脚本做一些恶意操作。

<img src={xssImg1} style={{width:'80%'}} />

- 基于 DOM 的 XSS  
通过修改原始的客户端代码，受害者浏览器的 DOM 环境改变，导致有效载荷的执行。也就是说，页面本身并没有变化，但由于 DOM 环境被恶意修改，有客户端代码被包含进了页面，并且意外执行。

:::tip
基于DOM的XSS攻击是不牵涉到页面Web服务器的。黑客通过各种手段将恶意脚本注入到用户页面中，比如通过网络劫持（Wifi路由器劫持、本地恶意软件）在页面传输过程中修改HTML页面的内容。
:::


备注：https只能增加攻击难度，不能防止所有场景的基于DOM的XSS攻击




## 预防XSS攻击
- 服务器对输入脚本进行过滤或转码  
- 前端对输入进行转码或者限制输入  
- Cookie使用HttpOnly属性  
- 添加验证码防止脚本冒充用户提交危险操作  
- CSP（https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP，内容安全管理）  
- CSP有如下几个功能：  
- 限制加载其他域下的资源文件，这样即使黑客插入了一个JS文件，这个文件也是无法被加载的  
- 禁止向第三方域提交数据，这样用户数据也不会外泄  
- 禁止执行内联脚本和未授权脚本  
- 还提供上报机制，这样可以帮助我们尽快发现有哪些XSS攻击，以便尽快修复问题。  






## 参考来源

 
[Web安全之XSS攻击](https://helloworldcoding.com/blog/article/6)